Conventional computer systems typically include several functional components. These components may include a central processing unit (CPU), main memory, input/output (“I/O”) devices, and disk drives. In conventional systems, the main memory is coupled to the CPU via a system bus or a local memory bus. The main memory is used to provide the CPU access to data and/or program information that is stored in main memory at execution time. Typically, the main memory is composed of random access memory (RAM) circuits. A computer system with the CPU and main memory is often referred to as a host system.
The main memory is typically smaller than disk drives and may be volatile. Programming data is often stored on the disk drive and read into main memory as needed. The disk drives are coupled to the host system via a disk controller that handles complex details of interfacing the disk drives to the host system. Communications between the host system and the disk controller is usually provided using one of a variety of standard input/output (“I/O”) bus interfaces.
Typically, a disk drive includes one or more magnetic disks. Each disk typically has a number of concentric rings or tracks on which data is stored. The tracks themselves may be divided into sectors, which are the smallest accessible data units. A positioning head above the appropriate track accesses a sector. An index pulse typically identifies the first sector of a track. The start of each sector is identified with a sector pulse.
Typically, the disk drive waits until a desired sector rotates beneath the head before proceeding a read or write operation. Data is accessed serially; one bit at a time and typically, each disk have its own read/write head.
The disk drive is connected to the disk controller that performs numerous functions, for example, converting digital data to analog head signals, disk formatting, error checking and fixing, logical to physical address mapping and data buffering. To perform the various functions for transferring data, the disk controller includes numerous components.
A conventional disk drive stores data bytes on disk drive platters in sets of a predetermined length. A disk drive controller or a host computer may generate error correction code (ECC) bytes and cyclic redundancy check (CRC) bytes for each set of data bytes. Sometimes, the host computer generates CRC bytes, and the disk controller generates its own set of CRC bytes. The CRC and the ECC bytes are appended to the end of the set of data bytes. The data bytes, CRC bytes and ECC bytes together make up a “sector” (shown in FIG. 1B), and this sector is stored on the disk platter.
When the disk drive controller reads a sector off the disk, the data bytes and CRC bytes are stored in a buffer unit (memory) in the disk drive. An ECC unit detects and corrects errors in the sector read off the platter. These corrections are made to the data bytes and CRC bytes stored in the buffer unit.
CRC is one way to maintain and validate data integrity. CRC bytes are generated and stored for each data set. CRC involves a process that operates on a block of data and generates a number that represents the content and organization of the data block. CRC provides a mathematical code that allows one to easily detect if the stored data has been corrupted. Typically, the CRC is transported and stored with the data and is checked as the data is transported, or when the data is retrieved from memory.
A typical circuit employing CRC error checking includes a CRC checker to verify integrity for old data and a CRC generator that generates CRC information for any new data and a CRC accumulator that stores the CRC values.
Often there is a need to compute CRC's in parallel to write operations to meet speed requirements. Also, data may be submitted in segments that are different in size.
Conventional disk controllers typically use a disk formatter with an 8-bit interface for handling the CRC functionality. The sector size for the conventional disk controller is 512 KB. Both the data segments and the CRC have an 8-bit boundary.
Newer disk controllers now use a 10-bit symbol interface and hence 20-bits are sent for CRC leaving a residue. Conventional disk controllers need to handle the residue effectively, without making complex changes.
Conventional techniques fail to provide an efficient solution for accumulating an r bit CRC on multiple n bit data blocks of varying sizes, and then apply them to the requirements for another interface, for example, a 10-bit symbol disk formatter interface. Therefore there is a need for an efficient CRC method and system so that CRC can be performed efficiently for different sector sizes/data formatter interface.